from django.apps import AppConfig
import logging

logger = logging.getLogger(__name__)

class BattlesConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'battles'

    def ready(self):
        """应用准备就绪时导入信号处理器并清理卡住的战斗"""
        import battles.signals
        self.cleanup_stuck_battles()
        self.start_manual_battle_queue()

    def cleanup_stuck_battles(self):
        """清理服务器启动时仍在运行状态的战斗"""
        try:
            from django.utils import timezone
            from .models import Battle

            # 查找所有状态为'running'的战斗
            stuck_battles = Battle.objects.filter(status='running')
            stuck_count = stuck_battles.count()

            if stuck_count > 0:
                logger.info(f"服务器启动时发现 {stuck_count} 个卡住的战斗，正在清理...")

                # 将这些战斗状态改为'error'并设置错误信息
                updated_count = stuck_battles.update(
                    status='error',
                    error_message='服务器重启时自动清理的卡住战斗',
                    finished_at=timezone.now()
                )

                logger.info(f"已成功清理 {updated_count} 个卡住的战斗")
            else:
                logger.info("服务器启动时未发现卡住的战斗")

        except Exception as e:
            logger.error(f"清理卡住战斗时发生错误: {e}")
            # 不抛出异常，避免影响服务器启动

    def start_manual_battle_queue(self):
        """启动手动对战队列管理器"""
        try:
            from .battle_queue_manager import get_manual_battle_queue_manager
            from .queue_processor import start_queue_processor

            # 获取队列管理器实例
            manager = get_manual_battle_queue_manager()

            # 将管理器实例保存到应用配置中，供API使用
            self.manual_queue_manager = manager

            # 启动队列处理
            manager.start_processing()

            # 启动队列处理器
            start_queue_processor()

            logger.info("手动对战队列管理器和队列处理器已启动")

        except Exception as e:
            logger.error(f"启动手动对战队列管理器时发生错误: {e}")
            # 不抛出异常，避免影响服务器启动
            # 设置为None，表示初始化失败
            self.manual_queue_manager = None
